package br.com.werp.regras.pessoa.controle;

import br.com.werp.regras.geral.Algoritimo;
import br.com.werp.regras.geral.Auditoria;
import br.com.werp.regras.geral.FabricaSubSistema;
import br.com.werp.regras.geral.util.BeanUtil;
import br.com.werp.regras.geral.util.Constantes;
import br.com.werp.regras.geral.vos.pessoa.DocumentoPessoaVO;
import br.com.werp.regras.geral.vos.tabelas.Documento_pessoal;
import br.com.werp.regras.pessoa.integracao.DocumentoPessoaDAO;
import br.com.werp.regras.pessoa.integracao.FabricaDAO;

import java.util.Iterator;
import java.util.List;


/**
 * @author Candido / Refactoring por Italo leitao 23/10/2006
 * Criado em  23/05/2005
 */
public class ControleDocumentoPessoal {
    public void manterListaDocumentos(DocumentoPessoaVO documentoPessoaVO,
        List documentos, String[] lista_documentos, String operacao)
        throws Exception {
        Algoritimo algoritimo = FabricaSubSistema.getAlgoritimo();

        if (Constantes.ADICIONAR.equals(operacao)) {
            algoritimo.criarIdVirtual(documentos, documentoPessoaVO);
        } else {
            algoritimo.removerIdVirtual(documentos, lista_documentos);
        }
    }

    public void atualizarDocumento(List documentos, int pess_id, Object key,
        String usuario) throws Exception {
        DocumentoPessoaDAO documentoPessoaDAO = FabricaDAO.getDocumentoPessoaDAO();
        Auditoria auditoria = FabricaSubSistema.getAuditoria();

        apagarDocumentos(pess_id, documentos, key, usuario);

        for (Iterator iter = documentos.iterator(); iter.hasNext();) {
            DocumentoPessoaVO element = (DocumentoPessoaVO) iter.next();

            if (!element.isIdVirtual()) {
                continue;
            }

            Documento_pessoal documento_pessoal = new Documento_pessoal();
            BeanUtil.copiarVO(element, documento_pessoal);
            documento_pessoal.setDcpe_pessoa(pess_id);
            documentoPessoaDAO.inserirVOGenericoSemIdentity(key,
                documento_pessoal);
            auditoria.auditarRecurso(key, usuario, documento_pessoal,
                Auditoria.INCLUIR);
        }
    }

    private void apagarDocumentos(int pess_id, List documentos, Object key,
        String usuario) throws Exception {
        Algoritimo algoritimo = FabricaSubSistema.getAlgoritimo();
        Auditoria auditoria = FabricaSubSistema.getAuditoria();

        DocumentoPessoaVO documentoPessoaVO = new DocumentoPessoaVO();
        documentoPessoaVO.setDcpe_pessoa(pess_id);

        DocumentoPessoaDAO documentoPessoaDAO = FabricaDAO.getDocumentoPessoaDAO();

        List documentos_banco = (List) obterDocumentoPessoal(String.valueOf(
                    pess_id));
        List remover = algoritimo.gerarListaRemoverIdsReais(documentos,
                documentos_banco);

        for (Iterator iter = remover.iterator(); iter.hasNext();) {
            DocumentoPessoaVO element = (DocumentoPessoaVO) iter.next();

            Documento_pessoal documento_pessoal = new Documento_pessoal();

            BeanUtil.copiarVO(element, documento_pessoal);

            documentoPessoaDAO.excluirDocumentoPessoal(documento_pessoal, key);

            auditoria.auditarRecurso(key, usuario, documento_pessoal,
                Auditoria.EXCLUIR);
        }
    }

    public void carregarDocumentoPessoal(int pess_id, List documentos_pessoais)
        throws Exception {
        DocumentoPessoaVO documentoPessoaVO = new DocumentoPessoaVO();

        documentoPessoaVO.setDcpe_pessoa(pess_id);

        List documentos_banco = (List) obterDocumentoPessoal(String.valueOf(
                    pess_id));

        documentos_pessoais.clear();

        documentos_pessoais.addAll(documentos_banco);
    }

    public List obterDocumentoPessoal(String pessId) throws Exception {
        DocumentoPessoaDAO documentoPessoaDAO = FabricaDAO.getDocumentoPessoaDAO();

        return documentoPessoaDAO.obterDocumentos(pessId);
    }
}
